import axios, { AxiosResponse } from 'axios';
import { localStorage } from '@/utils/local-storage';
import { STORAGE_TOKEN_KEY, STORAGE_USERID } from '@/store/mutation-type';
import { notification } from 'ant-design-vue'; // 这里是用于设定请求后端时，所用的 Token KEY
// 可以根据自己的需要修改，常见的如 Access-Token，Authorization
// 需要注意的是，请尽量保证使用中横线`-` 来作为分隔符，
// 避免被 nginx 等负载均衡器丢弃了自定义的请求头

export const REQUEST_TOKEN_KEY = 'Authorization'; // 创建 axios 实例
export const REQUEST_USERID = 'userId';

const exportRequest = axios.create({
  // API 请求的默认前缀
  baseURL: process.env.VUE_APP_API_BASE_URL,
  // timeout: 6000, // 请求超时时间
  responseType: 'blob',
});

const errorHandler = error => {
  if (error.response) {
    const { data = {} } = error.response;

    const description = data.message ? data.message : data.error ? data.error : error.message;
    notification.error({
      message: '请求错误',
      description,
    });
  } else {
    notification.error({
      message: '请求错误',
      description: error.message,
    });
  }

  return Promise.reject(error);
}; // 请求拦截器

const requestHandler = config => {
  const savedToken = localStorage.get(STORAGE_TOKEN_KEY); // 如果 token 存在
  const userId = localStorage.get(STORAGE_USERID);
  // 让每个请求携带自定义 token, 请根据实际情况修改

  if (savedToken) {
    config.headers[REQUEST_TOKEN_KEY] = savedToken;
    config.headers[REQUEST_USERID] = userId;
  }

  return config;
}; // Add a exportRequest interceptor

exportRequest.interceptors.request.use(requestHandler, errorHandler); // 响应拦截器

const responseHandler = response => {
  return response.data;
}; // Add a response interceptor

exportRequest.interceptors.response.use(responseHandler, errorHandler);
export { AxiosResponse };
export default exportRequest;
